/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.beans;


import java.util.Calendar;
import java.util.Date;
import org.cip.esymons.general.be.Solicitante;
import org.cip.esymons.general.util.ControladorAbstracto;
import org.cip.esymons.tesoreria.bc.ColegiadoDelegate;
import org.cip.esymons.tesoreria.bc.CuentaIngresoDelegate;
import org.cip.esymons.tesoreria.bc.MovimientoCuentaDelegate;
import org.cip.esymons.tesoreria.bc.PersonaJuridicaDelegate;
import org.cip.esymons.tesoreria.bc.PersonaNaturalDelegate;
import org.cip.esymons.tesoreria.bc.ValorCuentaDelegate;
import org.cip.esymons.tesoreria.be.EnumEstadoMovimiento;
import org.cip.esymons.tesoreria.be.EnumTipoDeuda;
import org.cip.esymons.tesoreria.be.MovimientoCuenta;
import org.cip.esymons.tesoreria.be.ValorCuenta;

/**
 *
 * @author Gilmar
 */
public class MovimientoCuentaController {

    private MovimientoCuentaDelegate delegado;
    private PersonaNaturalDelegate delegadoPersonaNatural;
    private PersonaJuridicaDelegate delegadoPersonaJuridica;
    private ColegiadoDelegate delegadoColegiado;
    private CuentaIngresoDelegate delegadoCuentaIngreso;
    private ValorCuentaDelegate delegadoValorCuenta;
    private MovimientoCuenta movimientoCuenta;
    private int tipoBusquedaDNICIP;
    private String dnioNroCip;
    private String nombreCuentaIngreso;
    private int tipoPago = 0;

    public MovimientoCuentaController() {
        delegado = new MovimientoCuentaDelegate();
        delegadoPersonaNatural = new PersonaNaturalDelegate();
        delegadoPersonaJuridica = new PersonaJuridicaDelegate();
        delegadoColegiado = new ColegiadoDelegate();
        delegadoValorCuenta = new ValorCuentaDelegate();
        delegadoCuentaIngreso = new CuentaIngresoDelegate();
    }

    public String buscarSolicitante() {
        try {
            if (tipoBusquedaDNICIP == 0) {
                movimientoCuenta.setFkSolCodigo((Solicitante) delegadoPersonaNatural.buscarXDni(dnioNroCip));
            } else {
                if (tipoBusquedaDNICIP == 1) {
                    movimientoCuenta.setFkSolCodigo((Solicitante) delegadoColegiado.buscarColegiadoXCip(dnioNroCip).getPersonaNatural());
                } else {
                    movimientoCuenta.setFkSolCodigo((Solicitante) delegadoPersonaJuridica.buscaJuridicaPorRuc(dnioNroCip));
                }
            }
        } catch (Exception ex) {
            movimientoCuenta.setFkSolCodigo(null);
        } finally {
            return null;
        }

    }

    public String nuevo() {
        movimientoCuenta = new MovimientoCuenta();
        movimientoCuenta.setFkSolCodigo(null);
        movimientoCuenta.setMcuFechvencimiento(new Date());
        return "nuevo";
    }

    public String grabar() {
        if (tipoPago == 0) {
            ValorCuenta vc = delegadoValorCuenta.valorCuentaActual(movimientoCuenta.getFkCinCodigo().getCinCodigo());
            if (vc == null) {
                ControladorAbstracto.warn("No existe valor para esa Cuenta de Ingreso");
                return null;
            } else {
                movimientoCuenta.setMcuMonto(vc.getVcuValor());
                movimientoCuenta.setMcuSaldo(vc.getVcuValor());
            }
        } else {
//            CuentaIngreso ci = delegadoCuentaIngreso.listarCuentasPorGlosa("acota");
//            if (ci == null) {
//                ControladorAbstracto.warn("No existe Cuenta de Ingreso Activa con la Glosa Acotacion");
//                return null;
//            }
            movimientoCuenta.setMcuSaldo(movimientoCuenta.getMcuMonto());
        }

        movimientoCuenta.setEstado(EnumEstadoMovimiento.Impaga);
        movimientoCuenta.setTipoDeuda(EnumTipoDeuda.OTROS);
        if (movimientoCuenta.getMcuFechvencimiento() != null) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(movimientoCuenta.getMcuFechvencimiento());
            movimientoCuenta.setMcuAnio(cal.get(Calendar.YEAR));
            movimientoCuenta.setMcuMes(cal.get(Calendar.MONTH));
        }
        delegado.create(movimientoCuenta);
        ControladorAbstracto.info("Inserción satisfactoria");
        return "buscar";
    }

    /**
     * @return the movimientoCuenta
     */
    public MovimientoCuenta getMovimientoCuenta() {
        return movimientoCuenta;
    }

    /**
     * @param movimientoCuenta the movimientoCuenta to set
     */
    public void setMovimientoCuenta(MovimientoCuenta movimientoCuenta) {
        this.movimientoCuenta = movimientoCuenta;
    }

    /**
     * @return the tipoBusquedaDNICIP
     */
    public int getTipoBusquedaDNICIP() {
        return tipoBusquedaDNICIP;
    }

    /**
     * @param tipoBusquedaDNICIP the tipoBusquedaDNICIP to set
     */
    public void setTipoBusquedaDNICIP(int tipoBusquedaDNICIP) {
        this.tipoBusquedaDNICIP = tipoBusquedaDNICIP;
    }

    public String getDnioNroCip() {
        return dnioNroCip;
    }

    public void setDnioNroCip(String dnioNroCip) {
        this.dnioNroCip = dnioNroCip;
    }

    public String getNombreCuentaIngreso() {
        return nombreCuentaIngreso;
    }

    public void setNombreCuentaIngreso(String nombreCuentaIngreso) {
        this.nombreCuentaIngreso = nombreCuentaIngreso;
    }

    /**
     * @return the tipoPago
     */
    public int getTipoPago() {
        return tipoPago;
    }

    /**
     * @param tipoPago the tipoPago to set
     */
    public void setTipoPago(int tipoPago) {
        this.tipoPago = tipoPago;
    }
}
